#ifndef HPLC_ZKYS_PACKETFORMAT_H
#define HPLC_ZKYS_PACKETFORMAT_H

namespace hplc
{
namespace zkys
{

#define TICK_TIMEOUT			500 //心跳包，ms单位

#define RETRANSMIT_TIMEOUT		250 //ms单位
#define RETRANSMIT_COUNT		0	//重发次数

#define PTR2U16(PTR) ((((quint8 *)(PTR))[0]<<8)|((quint8 *)(PTR))[1])  //从缓冲区取16位数据
#define PTR2U32(PTR) ((((quint8 *)(PTR))[0]<<24)|(((quint8 *)(PTR))[1]<<16)|(((quint8 *)(PTR))[2]<<8)|((quint8 *)(PTR))[3])  //从缓冲区取32位数据

#define ZKYS_PROTOCOL_HEAD_TAIL  0xFA    // 帧头帧尾
// 如果协议中间字节有0xFA，则转义为0xEA 0xFD
// 如果协议中间字节有0xEA，则转义为0xEA 0xED
// 即协议中间不可能有0xFA，0xEA后面必跟0xFD或0xED
#define ZKYS_PROTOCOL_ESCAPE (ZKYS_PROTOCOL_HEAD_TAIL)
#define ZKYS_PROTOCOL_ESCAPE_OUT1 (0xEA)
#define ZKYS_PROTOCOL_ESCAPE_OUT2 (0xFD)
#define ZKYS_PROTOCOL_ESCAPE2 (ZKYS_PROTOCOL_ESCAPE_OUT1)
#define ZKYS_PROTOCOL_ESCAPE2_OUT1 (ZKYS_PROTOCOL_ESCAPE_OUT1)
#define ZKYS_PROTOCOL_ESCAPE2_OUT2 (0xED)

/*
 * 帧错误码
*/
//#define PEC_NONE			(0x00)
//#define PEC_FORMAT			(0x01)
//#define PEC_CRC				(0x02)
//#define PEC_INVALIDE_PFC	(0x03)
//#define PEC_WRONG_DATA		(0x04)

#define ZKYS_REPLY_PEC_NONE			    (0x00)
#define ZKYS_REPLY_PEC_FORMAT			(0x01)
#define ZKYS_REPLY_PEC_CRC		        (0x02)
#define ZKYS_REPLY_PEC_INVALIDE_PFC	    (0x03)
#define ZKYS_REPLY_PEC_WRONG_DATA		(0x04)
#define ZKYS_REPLY_PEC_CANNOT_WRITE		(0x05)
#define ZKYS_REPLY_PEC_CANNOT_READ		(0x06)
#define ZKYS_REPLY_PEC_INVALID_ADDRESS	(0x07)



} // zkys
} // hplc

#endif // HPLC_ZKYS_PACKETFORMAT_H
